package cn.itcast.sys.service.impl;

import cn.itcast.goods.vo.DishOverViewVO;
import cn.itcast.goods.vo.SetmealOverViewVO;
import cn.itcast.orders.vo.OrderOverViewVO;
import cn.itcast.sys.service.WorkspaceService;
import cn.itcast.sys.vo.BusinessDataVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Map;

@Service
@Slf4j
public class WorkspaceServiceImpl implements WorkspaceService {

    // TODO 待处理

//    @Autowired
//    private OrderMapper orderMapper;
//
//    @Autowired
//    private UserMapper userMapper;
//
//    @Autowired
//    private DishMapper dishMapper;
//
//    @Autowired
//    private SetmealMapper setmealMapper;

    /**
     * 查询今日运营数据
     *
     * @return
     */
    @Override
    public BusinessDataVO businessData() {

//        Map<String, Object> map = new HashMap<>();
//        map.put("start", LocalDateTime.of(LocalDate.now(), LocalTime.MIN));
//        map.put("end", LocalDateTime.of(LocalDate.now(), LocalTime.MAX));
//        map.put("status", Orders.COMPLETED);
//
//        Double turnover = orderMapper.getTurnoverReportByMap(map); //营业额
//
//        Integer validOrderCount = orderMapper.getOrdersReportByMap(map); //有效订单数
//
//        map.put("status", null);
//        Integer totalOrderCount = orderMapper.getOrdersReportByMap(map);
//        Double orderCompletionRate = totalOrderCount == 0 ? 0 : BigDecimal.valueOf(validOrderCount)
//                .divide(BigDecimal.valueOf(totalOrderCount), 4, RoundingMode.DOWN)
//                .doubleValue(); // 订单完成率
//
//        Double unitPrice = validOrderCount == 0 ? 0 : BigDecimal.valueOf(turnover)
//                .divide(BigDecimal.valueOf(validOrderCount), 2, RoundingMode.CEILING)
//                .doubleValue(); // 平均客单价
//
//
//        Integer newUserCount = userMapper.getUserReportByMap(map); // 新增用户数


//        return BusinessDataVO.builder()
//                .turnover(turnover)
//                .validOrderCount(validOrderCount)
//                .orderCompletionRate(orderCompletionRate)
//                .unitPrice(unitPrice)
//                .newUsers(newUserCount)
//                .build();

        // TODO 假数据待处理（BusinessDataVO）
        return BusinessDataVO.builder()
                .turnover(2.5)
                .validOrderCount(10)
                .orderCompletionRate(0.5)
                .unitPrice(562.3)
                .newUsers(18)
                .build();
    }

    /**
     * 查询订单管理数据
     *
     * @return
     */
    @Override
    public OrderOverViewVO overviewOrders() {

//        Map<String, Object> map = new HashMap<>();
//        map.put("start", LocalDateTime.of(LocalDate.now(), LocalTime.MIN));
//        map.put("end", LocalDateTime.of(LocalDate.now(), LocalTime.MAX));
//        map.put("status", Orders.TO_BE_CONFIRMED);
//        Integer waitingOrders = orderMapper.getOrdersReportByMap(map); // 待接单数量
//
//        map.put("status", Orders.CONFIRMED);
//        Integer deliveredOrders = orderMapper.getOrdersReportByMap(map); // 待派送数量
//
//        map.put("status", Orders.COMPLETED);
//        Integer completedOrders = orderMapper.getOrdersReportByMap(map); // 已完成数量
//
//        map.put("status", Orders.CANCELLED);
//        Integer cancelledOrders = orderMapper.getOrdersReportByMap(map); // 已取消数量
//
//        map.put("status", null);
//        Integer allOrders = orderMapper.getOrdersReportByMap(map); // 全部订单


//        return OrderOverViewVO.builder()
//                .waitingOrders(waitingOrders)
//                .deliveredOrders(deliveredOrders)
//                .completedOrders(completedOrders)
//                .cancelledOrders(cancelledOrders)
//                .allOrders(allOrders)
//                .build();

        // TODO 假数据待处理（OrderOverViewVO）
        return OrderOverViewVO.builder()
                .waitingOrders(10)
                .deliveredOrders(10)
                .completedOrders(10)
                .cancelledOrders(10)
                .allOrders(10)
                .build();
    }

    /**
     * 查询菜品总览
     *
     * @return
     */
    @Override
    public DishOverViewVO overviewDishes() {
//        Map<String, Object> map = new HashMap<>();
//        map.put("start", null);
//        map.put("end", null);
//        map.put("status", StatusConstant.ENABLE);
//        Integer sold = dishMapper.getDishReportByMap(map);
//
//
//        map.put("status", StatusConstant.DISABLE);
//        Integer discontinued = dishMapper.getDishReportByMap(map);


//        return DishOverViewVO.builder()
//                .sold(sold)
//                .discontinued(discontinued)
//                .build();
        // TODO 假数据待处理（DishOverViewVO）
        return DishOverViewVO.builder()
                .sold(10)
                .discontinued(20)
                .build();
    }

    /**
     * 查询套餐总览
     *
     * @return
     */
    @Override
    public SetmealOverViewVO overviewSetmeals() {
//        Map<String, Object> map = new HashMap<>();
//        map.put("start", null);
//        map.put("end", null);
//        map.put("status", StatusConstant.ENABLE);
//        Integer sold = setmealMapper.getSetmealReportByMap(map);
//
//
//        map.put("status", StatusConstant.DISABLE);
//        Integer discontinued = setmealMapper.getSetmealReportByMap(map);


//        return SetmealOverViewVO.builder()
//                .sold(sold)
//                .discontinued(discontinued)
//                .build();
        // TODO 假数据待处理（SetmealOverViewVO）
        return SetmealOverViewVO.builder()
                .sold(10)
                .discontinued(20)
                .build();
    }

    /**
     * 查询业务数据
     *
     * @param start
     * @param end
     * @return
     */
    @Override
    public Map<String, Map<String, Object>> businessDataMap(LocalDateTime start, LocalDateTime end) {

//        Map<String, Object> map = new HashMap<>();
//        map.put("start", start);
//        map.put("end", end);
//
//        List<Map<String, Object>> businessDataMap = orderMapper.getBusinessDataList(map);
//
//        Map<String, Map<String, Object>> result = businessDataMap.stream().collect(Collectors.toMap(e -> e.get("date").toString(), e -> e));
//
//        LocalDateTime tempStart = start;
//        while (!tempStart.isAfter(end)) {
//
//            Map<String, Object> data = result.get(tempStart.toLocalDate().toString());
//
//            if (data == null) {
//                data = new HashMap<>();
//                data.put("date", tempStart.toLocalDate().toString());
//                data.put("turnover", 0.00); //营业额
//                data.put("validOrderCount", 0); //有效订单数
//                data.put("ordersCount", 0); //订单总数
//                data.put("orderCompletionRate", "0.00"); //订单完成率
//                data.put("unitPrice", 0.00); //平均客单价
//                data.put("newUsers", 0); //新增用户数
//
//
//                result.put(tempStart.toLocalDate().toString(), data);
//
//                tempStart = tempStart.plusDays(1);
//                continue;
//            }
//
//
//            Double turnover = Double.valueOf(data.get("turnover").toString()); //营业额
//
//            Integer validOrderCount = Integer.valueOf(data.get("validOrderCount").toString()); //有效订单数
//
//            Integer totalOrderCount = Integer.valueOf(data.get("ordersCount").toString()); //总订单数
//
//
//            String orderCompletionRate = totalOrderCount == 0 ? "0.00" : BigDecimal.valueOf(validOrderCount)
//                    .divide(BigDecimal.valueOf(totalOrderCount), 2, RoundingMode.DOWN)
//                    .multiply(BigDecimal.valueOf(100))
//                    .toString(); // 订单完成率
//
//            String unitPrice = validOrderCount == 0 ? "0" : BigDecimal.valueOf(turnover)
//                    .divide(BigDecimal.valueOf(validOrderCount), 2, RoundingMode.CEILING)
//                    .toString(); // 平均客单价
//
//
//            data.put("orderCompletionRate", orderCompletionRate); //订单完成率
//            data.put("unitPrice", unitPrice); //平均客单价
//
//
//            data.put("newUsers", 0); //新增用户数
//
//            tempStart = tempStart.plusDays(1);
//        }
//
//
//        // 批量获取新增用户数
//        List<Map<String, Object>> newUserCountList = userMapper.getUserReportByList(map);
//
//        newUserCountList.forEach(e -> {
//            Map<String, Object> newUserCountMap = result.get(e.get("date").toString());
//            newUserCountMap.put("newUsers", e.get("newUsers"));
//        });
//
//
//        return result;

        // TODO 待处理
        return null;
    }
}
